#include <iostream>
#include <string>
#include <list>
#include <string.h>
using namespace std;
typedef struct TagNode{
    char *tag;
    struct TagNode *next;

} TagNode;

typedef struct value1{
  char *type;
  TagNode *tags;
} value1;

char * copystr(char* v);
void addtype(char *tag, char *type);
void *createvalue1();
TagNode *CreateTagNode(char *type);
void InsertTag(TagNode* tag, char* tag_insert);
void ExtendTag(TagNode* tag, TagNode* tag2);
void printNode(TagNode * tmp);
void lexmain();

template <typename T>
void printlist(list<T> l);